import type { ConverContentProps } from './type'
import fs from 'fs/promises'
import { lookup } from 'mime-types'

/**
 * 将消息内容转换为适合API的格式，处理图片附件
 */
export const coverContent = async (data: ConverContentProps) => {
  // 处理单个消息的函数
  const processItem = async (item: any) => {
    // 如果没有图片，直接返回原始消息
    if (!item.image) {
      return item
    }

    try {
      // 获取图片的MIME类型
      const type = lookup(item.image)
      // 读取图片并转换为base64
      const base64 = (await fs.readFile(item.image)).toString('base64')

      // 返回包含文本和图片的多模态消息
      return {
        role: item.role,
        content: [
          {
            type: 'text',
            text: item.content
          },
          {
            type: 'image_url',
            image_url: {
              url: `data:${type};base64,${base64}`
            }
          }
        ]
      }
    } catch (error) {
      console.error(`处理图片失败: ${item.image}`, error)
      // 如果图片处理失败，返回只有文本的消息
      return item
    }
  }

  // 根据输入类型分别处理
  if (Array.isArray(data)) {
    // 处理消息数组，等待所有Promise完成
    return Promise.all(data.map(processItem))
  } else {
    // 处理单个消息
    return processItem(data)
  }
}
